Skip to content

L1 taxonomy: classify cancellations and cascade-only TCPStore logs - #439

Merged
continue-revolution merged 1 commit into
mainfrom
chengsongz/taxonomy-category-fixes
Oct 14, 2026
Merged

continue-revolution merged 1 commit into
mainfrom
chengsongz/taxonomy-category-fixes

Conversation

@continue-revolution

Copy link
Copy Markdown
Contributor

Five category descriptions in l1/categories.json. No decision values change; no code changes.

Each was found by reading a production misclassification back to the description that caused it.

What changed

cat problem fix
12 680 chars, longest of 38 (median 142), and the only one in prohibitive voice. No clause for "the initiating rank's output is absent", so the model declined instead of classifying. Say what to do when TCPStore is the only surface: pick it, with reduced confidence. Keep the guard that a visible upstream fault wins.
1 Read, in full, "no application fault" — false on its face, since a kill leaves plenty of application-shaped noise. Give it both surfaces a cancellation actually leaves: the bare slurmstepd marker, and progress-then-teardown. Name the cat 2 discriminator.
28 Names "TypeError/AttributeError on None", which matches interpreter-teardown noise verbatim. Exclude anything raised during shutdown: a deterministic code fault recurs on unchanged retry, so it fails on the first attempt, not after 3390 iterations.
34 Pinned rank 608 and the GPTDataset index-load path. Described as a class; discriminating signatures kept.
35 Pinned ckpt 27600. Same. (Its row indices were already removed on main by 3e96f3a, which also covered cat 29.)

Why it mattered

Hand-cancelled jobs were being recommended STOP. Their logs hold 751 SIGTERMs, 847 Exception ignored and healthy iterations to the last line before the signal; the grounded primary failure was Python's own weakref finalizer losing a module global during teardown — which Python labels Exception ignored precisely because it did not affect execution.

Separately, cascade-only TCPStore logs returned category_id: 0 ("none matched") at confidence 0, so the alert told the reader nothing about a job that had cleanly checkpointed and then lost its store.

Validation

  • 26 live Nemotron logs, re-analyzed on an isolated instance: 5 changes, all accounted for. Three 0 → 12 (intended), one 0 → 1 (a correction — that log has 6180 SIGTERMs and 3 TCPStore lines), one 26 ↔ 32 shown to be model variance by repeat trials on identical input, both STOP.
  • 13 labeled dataset cases covering every edited category, with positive and negative controls: 0 regressions, 1 improvement. Config errors still STOP, node failures still cat 2, labeled TCPStore cases still cat 12.
  • Seven incidents inspected individually. Five cancellations corrected STOP → RESTART. 4188567 correctly left at STOP/cat 17 — its kill followed a real MissingEpochIndex dataset fault (7104 occurrences, zero completed iterations), and the broadened cat 1 did not claim it.

Note for reviewers

An earlier revision of cat 1 described only the progress-then-teardown shape and broke the canonical case — two labeled cases whose entire log is *** STEP <id> ON <node> CANCELLED AT <time> *** drifted to cat 2. That is the same over-fitting this PR removes from cat 12, and it was caught only because the control set covered every edited category; both categories are RESTART, so headline accuracy was unchanged. Worth keeping that shape of control for future taxonomy edits.

Two follow-ups not addressed here: cats 26 and 32 are not reliably distinguishable (demonstrated twice), and cats 1 and 3 both have a claim on a log containing only a cancellation marker.

🤖 Generated with Claude Code

@greptile-apps

greptile-apps Bot commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Low impact] The PR appears safe to merge; no new actionable defect was established.

Summary

Updates the failure-category descriptions without changing decision values or executable code.

  • Cancellation and TCPStore clues point to the right failure category.
  • Checkpoint resume errors distinguish bookkeeping from bad settings.
  • Native crash categories rely on reusable failure signatures.
  • Filesystem error descriptions focus on paths and failure types.
  • Memory and gradient categories leave policy choices to their decision values.

Reviews (15) · Last reviewed commit: "L1 taxonomy: classify cancellations and ..." · Reviewed by Greptile

Comment thread src/nvidia_resiliency_ext/attribution/restart_agent/l1/categories.json Outdated
Comment thread src/nvidia_resiliency_ext/attribution/restart_agent/l1/categories.json Outdated
@continue-revolution
continue-revolution force-pushed the chengsongz/taxonomy-category-fixes branch from 37a32a7 to eb7be87 Compare October 10, 2026 01:03
Comment thread src/nvidia_resiliency_ext/attribution/restart_agent/l1/categories.json Outdated
@continue-revolution

continue-revolution commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor Author

Generated by human --

This PR is mainly to fix:

  • Patterned TypeError failure caused by slurm cancellation. Previously go to launch config error category (c28) and STOP, now go to slurm cancellation category (c1) / off-site termination category (c3) and RESTART
  • Patterned TCPStore failure caused by outside termination. Previously go to no match category (c0), now go to off-site termination category (c3), action unaffected
  • Remove any actions / policy in category description, and remove any data index leak from category description

@continue-revolution continue-revolution changed the title #426 - L1 taxonomy: classify cancellations and cascade-only TCPStore logs L1 taxonomy: classify cancellations and cascade-only TCPStore logs Oct 14, 2026
@namitdhameja namitdhameja added the ci-approved Approved to run CI label Oct 14, 2026
Thirteen descriptions in l1/categories.json, plus one name. No decision value
changes and no code changes; every category keeps the action it had.

Each change traces to a production misclassification, read back to the wording
that caused it.

Cancelled jobs were recommended STOP. 4285548 and 4285549 were cancelled by
hand; their logs hold 751 SIGTERMs, 847 "Exception ignored" and healthy
iterations to the last line before the signal, and the grounded primary failure
is Python's own weakref finalizer losing a module global during interpreter
teardown - which Python labels Exception ignored precisely because it did not
affect execution. Cat 28 names "TypeError/AttributeError on None" and matched
that text; cat 1, the right answer, read in full "no application fault", which
is false on its face since a kill leaves plenty of application-shaped noise.
Cat 1 now carries both surfaces a cancellation leaves - the bare slurmstepd
marker, which is the entire content of some logs, and progress-then-teardown -
and cat 28 excludes tracebacks demonstrably raised during shutdown.

Cat 28's exclusion is limited to shutdown frames rather than lateness. A
deterministic fault can surface late: 4411569 cycle 3 failed after an automatic
scale-up set data_parallel_size to 8192 and Megatron asserted 12288 was not
divisible by 1 * 8192, on 8321 ranks with no teardown frames at all. That
recurs under the resulting configuration, so it stops.

Cascade-only TCPStore logs returned category 0 at confidence 0, telling a
reader nothing about a job that had checkpointed cleanly and then lost its
store. Cat 12 was the longest description of the 38 at 680 characters against a
median of 142, and the only one written in prohibitive voice. Completed
iterations settle these: a rendezvous failure cannot happen at iteration 48310
because rendezvous already succeeded. Cat 12 is gated on no progress; cat 3
owns the mid-training case.

Cat 21 read "Assertion after checkpoint resume (progress-log bookkeeping)" in
116 characters, which made it a superset of cat 28 for any post-resume
assertion - 4411569 landed there in 4 of 5 runs. It now names the bookkeeping
meant and excludes configuration-value assertions.

Cats 34 and 35 described the seed incident that produced them, pinning a rank
and a checkpoint number. Nine descriptions asserted the action as well as the
evidence; the decision field already carries that, and the description was a
second, unenforced copy. Claims about the nature of a failure are kept, since
that is what a classifier should weigh.

Validated on 26 live logs re-analyzed on an isolated instance, 13 labeled
dataset cases covering every edited category with positive and negative
controls, and individual inspection of 20 incidents. Five cancellations move
STOP to RESTART; 4188567 correctly stays STOP because its kill followed a real
MissingEpochIndex dataset fault; 4411569 moves RESTART to STOP; the labeled
TCPStore cases stay on cat 12 and the labeled progress-log assertions stay on
cat 21.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@continue-revolution
continue-revolution force-pushed the chengsongz/taxonomy-category-fixes branch from 8ab87ed to a8ebbeb Compare October 14, 2026 22:36
@continue-revolution
continue-revolution merged commit 49af0b0 into main Oct 14, 2026
6 checks passed
@continue-revolution
continue-revolution deleted the chengsongz/taxonomy-category-fixes branch October 14, 2026 23:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-approved Approved to run CI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants